package classpath

import (
	"os"
	"strings"
)

// 路径分隔符。对于windows系统，他是一个分号;
const pathListSeparator = string(os.PathListSeparator)

// Entry接口
type Entry interface {
	// 寻找和加载class文件
	ReadClass(classname string) ([]byte, Entry, error)
	// 相当于toString方法，返回变量的字符串表示形式
	String() string
}

// 根据传入的路径名称不同，用不同的方式去查找class文件
// 不同的Entry定义了不同的查找类的逻辑
func newEntry(path string) Entry {
	if strings.Contains(path, pathListSeparator) {// 包含分号，意思是同时指定了多个路径
		return newCompositeEntry(path)
	}
	if strings.HasSuffix(path, "*") {// 包含通配符
		return newWildcardEntry(path)
	}
	if strings.HasSuffix(path, ".jar") || strings.HasSuffix(path, ".JAR") ||// 压缩文件
		strings.HasSuffix(path, ".zip") || strings.HasSuffix(path, ".ZIP") {
		return newZipEntry(path)
	}
	return newDirEntry(path)// 视为一个文件夹名称
}
